package com.foundryx.shared.core.utils;

import java.util.Collection;
import java.util.Map;

/**
 * @className: AssertUtil
 * @author: ocxz1
 * @date: 2025/6/20 上午10:25
 * @Version: 1.0
 * @description: fx-share-resources
 */
public class AssertUtil {

    /**
     * 断言字符串不为空
     *
     * @param str     断言字符串
     * @param errorMsg 错误信息模板
     * @param params  参数
     */
    public static void notBlank(String str, String errorMsg, Object... params) {
        isTrue(CheckUtil.notBlank(str), errorMsg, params);
    }

    /**
     * 断言对象不为空
     *
     * @param obj     断言对象
     * @param errorMsg 错误信息模板
     * @param params  参数
     */
    public static void notNull(Object obj, String errorMsg, Object... params) {
        isTrue(CheckUtil.notNull(obj), errorMsg, params);
    }

    /**
     * 断言对象不为空
     *
     * @param obj
     * @param identifyValue
     * @param errorMsg
     * @param params
     */
    public static void objNotNull(Object obj, Object identifyValue, String errorMsg, Object... params) {
        isTrue(!CheckUtil.objHasNull(obj, identifyValue), errorMsg, params);
    }

    /**
     * 断言集合是否为空
     *
     * @param collection 断言对象
     * @param errorMsg    错误信息模板
     * @param params     参数
     */
    public static void isNotEmpty(Collection<?> collection, String errorMsg, Object... params) {
        isTrue(CheckUtil.isNotEmpty(collection), errorMsg, params);
    }

    /**
     * 断言map是否为空
     *
     * @param map     map
     * @param errorMsg 错误信息模板
     * @param params  参数
     */
    public static void isNotEmpty(Map<?, ?> map, String errorMsg, Object... params) {
        isTrue(CheckUtil.isNotEmpty(map), errorMsg, params);
    }

    /**
     * 断言表达式为真
     *
     * @param expression 表达式
     * @param errorMsg    错误信息模板
     * @param params     参数
     */
    public static void isTrue(boolean expression, String errorMsg, Object... params) {
        if (!expression) {
            errorMsg = StringUtil.format(errorMsg, params);
            throw new RuntimeException(errorMsg);
        }
    }
}
